//----------------------------------*-C++-*----------------------------------//
/*!
 * \file   Definitions.hh
 * \author Jeremy Roberts
 * \date   Wed Jul 11 18:24:54 2007
 * \brief  Definitions for use in slabtran.
 * \note   Copyright (C) 2011 Jeremy Roberts.  Derived from Denovo.
 */
//---------------------------------------------------------------------------//
// $Rev:: 121                                           $:Rev of last commit
// $Author:: j.alyn.roberts@gmail.com                   $:Author of last commit
// $Date:: 2011-08-06 01:04:32 +0000 (Sat, 06 Aug 2011) $:Date of last commit
//---------------------------------------------------------------------------//

#ifndef DEFINITIONS_HH
#define DEFINITIONS_HH

#define DEBUG

#include <vector>

namespace slabtran
{

/// \name Enumerations useful for future extensions
//\{

/*!
 *  \brief Discrete ordinates equation sets.
 *
 *  This enumerates the various equation sets available
 *  for solving the discrete ordinates equations.
 *  The equations must be specific to a dimension, as we do
 *  not template the equation classes.
 *
 *  For adding a new equation set, use for the token the
 *  prefix for the associated class (e.g. \em DD_1D for
 *  the \ref DD_1D_Equations class).
 *
 */
enum Equation_Set {
    DD_1D               = 0,  // 1-d diamond difference
    DD_2D               = 1,  // 2-d diamond difference
    DD_3D               = 2,  // 3-d diamond difference
    END_EQUATION_SET    = 3
};

/*!
 *  \brief Mesh cell id types.
 *
 *  This enumerates the various cell ids that can be
 *  assigned to a mesh cell.  These ids should provide
 *  enough flexibility to give unique identifiers to
 *  particular geometrical or other domain aspects.
 *  Pin cells could be numbered 1 through 225 for a
 *  15x15 assembly, and each assembly can be given an id.
 *
 *  For adding a new mesh cell id type, use for the token a
 *  complete description with the suffix \em _ID, e.g. for
 *  the material id, \em MATERIAL_ID.
 *
 */
enum Cell_Id_Types {
    MATERIAL_ID         = 0,  // material identifier
    PINCELL_ID          = 1,  // pin cell identifier
    ASSEMBLY_ID         = 2,  // assembly identifier
    REGION_ID           = 3,  // region identifier (e.g. fuel, mod, clad ...)
    END_CELL_ID_TYPES   = 4
};

//\}

// common type definitions
typedef std::vector<double> Vec_Dbl;

//! Boundary conditions
enum BC  {
	LEFT    = 0,
	RIGHT   = 1,
	BOTTOM  = 2,
	TOP     = 3,
	NORTH   = 4,
	SOUTH   = 5,
	END_BC  = 6
};

//! IJK directions.
enum IJK {
	I       = 0,
	J       = 1,
	K       = 2,
	END_IJK = 3
};

//! XYZ directions.
enum XYZ {
	X       = 0,
	Y       = 1,
	Z       = 2,
	END_XYZ = 3
};

//! mu/eta/xi directions.
enum DIR {
	MU       = 0,
	ETA      = 1,
	XI       = 2,
	END_DIR  = 3
};

//! Spatial Dimensions.
enum DIMENSIONS {
	ONED             = 1,  // 1-d
	TWOD             = 2,  // 2-d
	THREED           = 3   // 3-d
};

} // end namespace slabtran

#endif // DEFINITIONS_HH

//---------------------------------------------------------------------------//
//              end of kba/Definitions.hh
//---------------------------------------------------------------------------//
